package 力扣日常刷题.木23一月.第02天302;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author 帅小伙
 * @date 2022/3/2
 * @description
 */
public class Demo18小美的区域会议 {


        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int k = sc.nextInt();
            List<Integer>[]tree = new ArrayList[n+1];

            for(int i=1;i<=n;i++){
                tree[i] = new ArrayList<>();
            }
            for(int i=1;i<=n-1;i++){
                int a = sc.nextInt();
                int b = sc.nextInt();
                tree[a].add(b);
                tree[b].add(a);
            }

            int[] level = new int[n+1];
            for(int i = 1;i <= n;i++){
                level[i] = sc.nextInt();
            }

            long ans = 0;
            for(int i = 1;i <= n;i++){
                boolean[] vis = new boolean[n+1];
                // 树  构建个部门构建  使用过吗vis   职位  最大差距   第一个构建的   第一个构建的等级
                ans += dfs(tree,i,vis,level,k,i,level[i]);
                ans %= 1000000007;
            }

            System.out.println(ans);
        }

        public static long dfs(List<Integer>[] tree,int i,boolean[] vis,int[] level,int k,int s,int s_k){
            long ans = 1;

            for(int j:tree[i]){
                // 保证从前到后搜索一遍   不重复遍历
                if(!vis[j] && ((level[j] > s_k && level[j] - s_k <= k) || (level[j] == s_k && j > s)) ){
                    vis[j] = true;
                    ans = (ans * (1 + dfs(tree,j,vis,level,k,s,s_k)));
                    ans %= 1000000007;
                }
            }
            return ans;
        }

}
